#discardi
import discord
import random
import helper
import requests
import base64
import datetime
import asyncio
import socket
import time
from io             import BytesIO
from PIL            import Image
from discord        import Embed, SelectMenu, SelectOption
from discord.utils  import get
from itertools      import cycle
from logg           import logger
from discord        import Button
from main           import bot
from discord.ext    import commands, tasks
from Config         import *


intents = discord.Intents.all()
intents.members = True
intents.messages = True
intents.guilds = True
intents.reactions = True
bot_discord = commands.Bot(command_prefix="/", intents=intents, case_insensitive=True)



@bot_discord.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.CommandNotFound):
        # Игнорировать ошибку CommandNotFound
        pass
    else:
        # Вывести остальные ошибки
        print(f"An error occurred: {error}")


@bot_discord.event
async def on_ready():
    channel = bot_discord.get_channel(channel_id)

    if channel:

        embed = discord.Embed(
            title="Бот запущен!",
            description="Привет, я успешно запустился!",
            color=color,  # Используйте выбранный цвет
        )
    await channel.send(embed=embed)


@bot_discord.command(name="helpertg")
async def helper_command(ctx):
    response = helper.helper_command()
    await ctx.send(response)


@bot_discord.command(name="helper")
async def helperd_command(ctx):
    embed = helper.helperd_command()
    await ctx.send(embed=embed)


@bot_discord.command(name="tg", help="Пересылает сообщение в телеграмм группу")
async def send_to_telegram(ctx, *, message_text=None):
    try:
        # Получение ID пользователя, вызвавшего команду
        user_id = ctx.author.id

        # Проверка, что ID пользователя совпадает с вашим ID
        if user_id != useridds:
            raise ValueError("Вы не имеете права использовать эту команду.")
        # Проверка, чтобы команда не была отправлена просто как "tg"
        if message_text is None or message_text.strip().lower() == "tg":
            # Создание красного embed сообщения
            embed = discord.Embed(
                title="Ошибка",
                description="Пожалуйста, укажите текст для отправки в телеграмм группу.",
                color=discord.Color.red(),
            )
            await ctx.send(embed=embed)
            return
        # Получение имени сервера и канала
        server_name = ctx.guild.name if ctx.guild else "лс"
        channel_name = ctx.channel.name if ctx.guild and ctx.channel.name else ""

        # Получение имени пользователя
        user_name = ctx.author.name

        # Получение чата из аргументов команды, если указан
        chat_argument = message_text.split()[0].lower()
        chat_id = chat_idsds.get(chat_argument.lower())

        # использование capitalize для сопоставления регистра

        if not chat_id:
            raise ValueError(
                "Укажите существующий чат для отправки сообщения в телеграмм."
            )

        # Формирование сообщения с учетом имени пользователя, сервера и канала
        if channel_name:
            formatted_message = f"[Discord] [{server_name}] [{channel_name}] [{user_name}]: {message_text.split(' ', 1)[1]}"
        else:
            formatted_message = f"[Discord] [{server_name}] [{user_name}]: {message_text.split(' ', 1)[1]}"

        # Отправка сообщения в телеграм
        bot.send_message(chat_id, formatted_message)

        await ctx.send("Сообщение успешно отправлено в телеграмм группу!")
    except ValueError as ve:
        await ctx.send(f"Ошибка: {ve}")
    except Exception as e:
        await ctx.send(
            f"Произошла ошибка при отправке сообщения в телеграмм группу: {e}"
        )


@bot_discord.command(name="embed")
async def my_embed(ctx):
    color = discord.Colour.random()  # Цвет полоски по бокам
    embed = discord.Embed(
        title="Привет, мир!",
        description="Это встроенное сообщение на Discord!",
        color=color,
    )
    embed.add_field(name="Поле 1", value="Значение 1", inline=True)
    embed.add_field(name="Поле 2", value="Значение 2", inline=False)
    embed.add_field(name="тест", value="world", inline=False)

    await ctx.send(embed=embed)


# Добавьте другие команды, если есть


@bot_discord.command()
async def diagnostics(ctx):
    # Получаем текущее время
    current_time = datetime.datetime.now()

    # Получаем информацию о боте
    bot_user = ctx.bot.user
    bot_name = bot_user.name
    bot_id = bot_user.id
    bot_creation_date = bot_user.created_at

    # Получаем информацию о сервере
    guild = ctx.guild
    guild_name = guild.name
    guild_id = guild.id
    guild_member_count = guild.member_count

    # Формируем сообщение с диагностической информацией
    diagnostics_message = f"""
    **Диагностика бота:**
    Время: {current_time}
    Бот: {bot_name} (ID: {bot_id})
    Дата создания бота: {bot_creation_date}

    **Информация о сервере:**
    Сервер: {guild_name} (ID: {guild_id})
    Количество участников: {guild_member_count}
    """

    # Отправляем сообщение с диагностической информацией
    await ctx.send(diagnostics_message)


@bot_discord.command()
async def server(ctx):
    # Создаем список серверов, на которых находится бот
    servers = ctx.bot.guilds
    # Формируем список строк с информацией о серверах
    server_list = []
    for guild in servers:
        server_members = guild.member_count
        online_members = sum(
            member.status == discord.Status.online for member in guild.members
        )
        text_channels_count = len(guild.text_channels)
        voice_channels_count = len(guild.voice_channels)

        server_list.append(
            f"{guild.name} (Участников: {server_members}, Онлайн: {online_members}, Текстовых каналов: {text_channels_count}, Голосовых каналов: {voice_channels_count})"
        )

    # Создаем объект Embed для форматирования сообщения
    embed = Embed(title="Список серверов, на которых находится бот", color=0x91FF)
    if ctx.bot.user.avatar:
        embed.set_thumbnail(
            url=ctx.bot.user.avatar.url
        )  # Используйте avatar.url вместо avatar_url
    else:
        embed.set_thumbnail(
            url=ctx.bot.user.default_avatar.url
        )  # Используйте default_avatar.url вместо default_avatar_url

    # Добавляем информацию о серверах в Embed
    for i, server_info in enumerate(server_list, start=1):
        embed.add_field(name=f"Сервер {i}", value=server_info, inline=False)

    # Добавляем счетчик серверов
    embed.set_footer(text=f"Всего серверов: {len(servers)}")

    # Отправляем сообщение с перечислением серверов
    await ctx.send(embed=embed)
